package org.jeecg.modules.demo.Kingdee.bank.entity.settlement;

import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * 单笔付款查证响应实体 (SKDLBATD)
 * 参数名严格按照接口文档定义，确保与银行接口字段完全一致
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
public class SinglePaymentQueryResponse {
    
    /**
     * 交易状态
     */
    private String status;
    
    /**
     * 交易状态信息
     */
    private String statusText;
    
    /**
     * 支付任务状态
     * 01：待提交：待提交审批
     * 02：待付款：已提交审批,流程运行中
     * 03：处理中：审批通过，正在付款
     * 04：付款成功：支付终态，付款成功
     * 05：付款失败：支付终态，付款失败
     * 06：已拒绝：审批不同意
     */
    private String pyStat;
    
    /**
     * 资金下拨结果
     * 该字段在单据为联动支付时展示：
     * 00-待处理；01-处理中；02-差额为0,无需下拨；03-成功；04-失败
     */
    private String alocStat;
    
    /**
     * 错误信息展示
     */
    private String failReason;
    
    /**
     * 银行交易结果
     * 银行返回结果（当单据为联动支付时，该字段包括资金下拨失败的信息）
     * （当ERP用户通过付款交易撤回接口成功撤回业务，该字段返回【已作废：ERP用户xx已撤回”）
     */
    private String bnkRetCode;
    
    /**
     * 备注
     * JSON格式字符串，包含审批时间、创建时间、交易时间等信息
     */
    private String extendRemark;
    
    /**
     * 付方账号
     */
    private String pypartyAccnum;
    
    /**
     * 付方户名
     */
    private String pypartyAccnm;
    
    /**
     * 付方开户行
     */
    private String pypartyDepBnkNm;
    
    /**
     * 付方开户行联行号
     */
    private String pypartyBnkgId;
    
    // ========== 向下兼容的getter/setter方法 ==========
    // 为了保持向下兼容，提供原有字段名的getter/setter方法
    
    @JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
    public Integer getTotalRecords() {
        // 对于单笔查证，返回1（找到的话）或0（找不到）
        return (this.pyStat != null && !this.pyStat.isEmpty()) ? 1 : 0;
    }
    
    @JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
    public Integer getReturnRecords() {
        return getTotalRecords();
    }
    
    // 其他兼容字段的getter/setter
    @JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
    public String getBankTxnResult() {
        return this.bnkRetCode;
    }
    
    public void setBankTxnResult(String bankTxnResult) {
        this.bnkRetCode = bankTxnResult;
    }
    
    @JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
    public String getDocStatus() {
        return this.pyStat;
    }
    
    public void setDocStatus(String docStatus) {
        this.pyStat = docStatus;
    }
}